StupidBeauty
Read times:1038Posted at:Sun Jan 27 18:13:48 2013
- no title specified

Blender维基翻译:Blender开发常见问题,Blender Dev FAQ

Blender是使用什么语言开发的?

简单地说是C/C++/Python。

  • •.C - blender的核心部分 大部分的内部功能 工具和编辑器。

  • •.C++ - 窗口管理,物理引擎,声音和游戏引擎。

  • •.Python – 界面定义,扩展和大部分文件格式的导入/导出

blender开发者们使用什么编辑 器/集成开发环境?

已知 在使用CMake 生成项目文件 的情况下, 这些集成开发环境 都适合于开发blender。

  • •.Eclipse任意平台

  • •.QtCreator任意平台

  • •.Netbeans任意平台

  • •.KDevelopLinux

某些开发者 会直接使用编辑器来开发,例如vim、emacs、geany、notepad++和scite。

跟python 相比,使用 不同的编辑器/集成开发环境来开发C/C++代码 是狠正常的事。

应该在哪里向blender提出功能要求勒?

可能 中加入的功能太多了, 以致于 狠难 有效地管理它们。所以, 我们不像其它项目那样 在漏洞跟踪系统 中提供功能请求选项。

如果妳只是想增加一个小小的功能的话,例如 向一个已有的工具中增加一个选项 那么 妳可以试着联系那个工具的作者,或者,至少可以尝试联系当前的维护者。
参考模块拥有

如果妳的建议 狠大,那么尝试 到blenderstorm 上提出这个建议,并且收集反馈信息 让更多人来关注它。并且 ,最终引来 一位开发者评估 一下这个建议,得出是否可行的结论。
参考blenderstorm.org

为什么不迁移到分布 式版本控制系统?(git/mercurial/bazaar)

有些核心开发者确实希望能迁移到分布 式版本控制系统中,然而 这不是一件简单事。

未来会有这种可能性,但是 这个迁移过程狠复杂。因为blender 的svn 中有一些大的二进制文件, 这就使得 将历史信息迁移 到另一个系统 中: 我们必须找到一种方法来管理这种文件

迁移mercurial/bazaar中可能比较容易,不过我们 还需要评估。

这种迁移工作, 我们需要靠一位有经验的管理 员来做 。所以我们需要先做充分的研究和计划才能真正开始迁移。

为什么 编译Blender 失败了?

编译失败的可能原因有狠多种,不过 有些原因是比较常见的。另外 ,记住 一定要看输出 的第一个错误 ,因为 这通常是编译失败的根本原因 。后面出现的错误 狠可能就是由第一个错误引起的。

文件未找到(File not found)或无法解析 的符号(Unresolved Symbols)

这通常意味着: 某个库未安装、 未在构建系统中配置 好或者使用 了错误的版本。另外 ,在windows 系统中, 要确保下载 了lib/目录 ,并且安装 了必要 的开发库。另外 在编译Blender 的时候,禁用某些 也可能避免编译失败 。参考 构建Blender 文档 以了解依赖关系的细节。

Blenderplayer编译失败,因为缺少某些函数(missing functions)

狠多开发者都不编译blenderplayer ,所以 们没注意到这一点 - 如果妳遇到这个错误了, 就到源代码中去找到 该函数的原型, 将函数原型复制到stubs.c 文件 ,将返回值改成NULL 或0。如果返回 的是一个结构体,那么妳应当将NULL 转换成那个结构 体的类型

DNA编译错误

这通常意味着: 向某个头文件中的一个结构体中加入了一些东西,而 又忘记调整结构 体中 的内存对齐情况了。Blender要求结构 的大小是 8 的整数倍,参考 SDNA注意事项 以了解细节。所以,如果 妳向结构体中加入了一个short 类型的成员,并且已经有了一个char pad[1]成员,那么 妳应当将它改成char pad[7],这样来保证结构 体总长度仍为八的整数倍。当然 ,如果妳忘记了规则的话, 那就每次增加 一个char 长度的填充,直到不再出现这个编译错误:) (如果妳是在 32 位机器上编译的话,可以这么做。 而别人呢,在她的64 位机器上编译出错的话,也可以这么干... 还是省 点工夫吧,读一读规则 ,因为对齐 还是 对程序有挺大影响的,无论 妳添加了多少的填充成员)

RNA编译错误

这通常意味着指定 了错误的DNA 结构体类型或属性名。

缺少界面按钮和菜单

这通常意味着,妳向界面 的python 代码中加入了一些东西,但是 又写错了代码。查看 一下终端输出 ,看看报告了什么错误,这种错误通常是因为缺少制表 空格。Blender 中所有的python 脚本都使用空格作为缩进。

菜单或复选框的默认值错误

检查以确认: 在创建结构 体的函数中添加 了默认值 在初始 化已有结构 体的readfile.c 中的do_versions 里创建了一个版本补丁

源代码常见问题

如何编译Blender

按照开发 :文档/构建 Blender 中的指示 来。

有哪些文档?

开发: 源代码/架构 页面中狠多文档 ,说明了Blender 的C 源代码的架构。 新来的 要想理解 这些东西可不容易,因为需要 读狠多东西,而且它们 并不一定是及时更新 的。但是 妳应该经常看看它们 - 妳更好 地理解了Blender 中的一些局部代码时 ,这 些文档 就更易理解,也 更有用了。

blender的源代码是从哪里开始执行的 ,接下来 的代码干了些什么?

main()函数位于 source/creator/creator.c 文件 中。

首先分析命令行参数 ,进行一系列的初始化 ,读取一个 .blend 文件 ,然后 main() 函数 就把控制权转移 WM_main() 函数,该函数位于 source/blender/windowmanager/intern/wm.c 文件中。 这个函数就是一个 死循环了, 它处理事件和通知 ,并且在屏幕上更新绘制内容 。事件 和通知是这样的一些东西: 由用户的操作引起 (例如,鼠标点击) 或者 由blender 内部 其它部分 的系统信号 ,表示某些东西 发生了改变。它们 的作用就是告知某些东西必须重新计算 、绘制 ,或者告知一些其它的信息。

关于文件和子系统的组织情况的一份概述?

这里有一副 艺术 性的图画

妳需要关心的代码,大部分都位于 source/blender/ 目录 中。当然 ,要是 想看Python 代码的话,它们位于 release/scripts/ 中。

用户界面的代码在哪里?

用户界面的布局是由Python 代码来定义的 ,其绘制是由C 代码来实现的 。另外某些部分 用户界面 是直接由C 代码来 定义 的。

Python代码位于

  • •. release/scripts/modules/bl_ui/ 。例如, 此目录中的 space_view3d.py 就是 3D视图( 3D View )这种编辑器类型(空间)对应的代码。

C语言的界面绘制代码位于:

  • •. source/blender/editors/interface/

为创建界面的代码定义python 接口 的胶水代码位于

  • •. source/blender/makesrna/intern/rna_ui_api.c

大部分Python 界面代码做的事情就是, 将那些用来调整操作 器( operators )的属性的用户交互部件 在界面上布局起来。操作 器就是Blender 中的工具。 妳应当读一下 开发:2.5/ 源代码 /架构/操作

当妳将鼠标悬停到用户界面的一个按钮上时,例如 旋转 Spin ), 它会显示出在妳 按下该按钮时 将会调用的操作器的Python 名字 - bpy.ops.mesh.spin() 这个功能 是由C 语言中的一个叫做 MESH_OT_spin (参考 开发:2.5/ 源代码 /架构/操作 中的命名习惯 )的操作器来具体实现的。如果 妳去看一下那 段代码的话, 妳会 发现 它是一个 wmOperatorType 结构体, 由多个函数指针 和标志组成。其中重要 的一个就是 invoke 函数,对于 这里讲到的操作器,就是 spin_mesh_invoke() 函数。 如果妳在那个函数上设置一个断点,那么, 在妳按下 旋转 Spin )按钮时,便会发现该函数 被调用了。

Python bpy_operator.c代码知道该怎么 module.func MODULE_OT_func 之间来回切换。

DNARNA是什么东西?

这两个名字来自于基因研究 中的核酸,暗示 了它们的功能:DNA,在基因学中的作用就是 ,充当编码 code ,使得妳可以复制 出某种东西。对于Blender 它就是保存到磁盘 上的 .blend 文件 中的内容 - 其中包含了所有的用户设置选项、 网孔(mesh)、对象、场景等等数据。RNA,其作用也与基因学中的对应东西类似,是一个辅助系统,用于 将DNA 编码( code )转换 成Blender 内部系统 中的数据。

source/blender/makesdna/ 中的 .h 文件定义了所有需要保存 到硬盘上的数据的结构体、枚举量等东西。 这些东西通常也会在运行中的系统的内存中使用。例如, DNA_mesh_types.h定义 Mesh 结构体,其中 的信息足以保证将用户定义 的网孔(mesh)保存到硬盘上。 而在运行时,内存 中也可能会有一个对应的 Mesh 不过运行 可能会使用各种各样 派生 网孔(mesh)结构 更利于编辑 ,例如 在编辑过程中效率更高。

DNA 的另一个重要作用就是, 是一个用来 在不同版本的Blender 之间保持兼容性的系统。 我们是通过以下方式做到这一点的: 将一 段描述各个结构 体的布局情况 的编码 同时保存到硬盘上,并且以后也会读 出来。 这也意味着,结构 体的布局无需保持不变。 makesdna 目录 中的C 语言代码就是用来产生 和解释结构 体描述信息的。参考 开发: 源代码 /数据结构/DNA结构

RNA也有一部分是通过代码生成来工作 的, 其代码位于 source/blender/makesrna 其设计意图是成为 一个更抽象、更易用的DNA 数据接口。例如,对于DNA 结构体中使用 一个short 成员中的一个位 来表示的标志,RNA 可能 会表现成一个逻辑属性。 到目前为上, 这种更易用的 数据接口 并没有在C 代码中广泛使用。 在 Python 的界面代码中 倒是 重度使用了。 大部分访问Blender 数据 的Python 代码都是自动生成的,它们会使用RNA 系统。参考 开发:2.5/ 源代码 /架构/RNA 以便更好地了解RNA。

图标在哪?

图标的PNG 文件位于 release/datafiles blenderbuttons.png 是一个大尺度的PNG 文件,其中包含 了几乎所有 的按钮图标,它们按照 一个矩阵排列起来。 画刷 (brush) 图标是单个的PNG 文件,位于 brushicons 子目录。 datafiles目录中还有闪屏图片 和一些TrueType 字体

这些数据文件都会被转换成 C 语言文件, 在构建时, 它们会将数据声明 成字符数组 。所以, 对这些文件的修改要在重新编译 后看到结果。

大部分图标都位于 blenderbuttons.png 图片中。 这个图片会作为一个纹理载入到显卡中,然 ,按照需要 把其中那些 的16x16 区域复制到屏幕上正确的位置。初始 化这些图标的代码位于 source/blender/editors/interface/interface_icons.c init_internal_icons() 函数中。图片 中图标 的顺序是: 从底向上、从左向右 ,也就是 source/blender/editors/include/UI_icons.h 中的 DEF_ICON 声明的顺序。

妳可以制作妳自己的图标文件, 以覆盖编译进去 blenderbuttons.png 在用户选 项(User Preferences)的主题(Theme) 面板中 ,有一个位置,可以输入 一个图标文件名。 此文件应当按照与 blenderbuttons.png 相同的顺序布局。

欧倩恰

Your opinions
Your name:Email:Website url:Opinion content:
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4